import socketserver
from pprint import pprint

from chack_terminal.chack_terminal_info import chack_terminal_info
from save_info.save_terminal_info import save_info_to_db


class TCPRequestHandler(socketserver.BaseRequestHandler):
    """tcp服务端
    NOTE: 模拟断开字典的键报错，会再次进行一次请求
    """

    def setup(self):
        """handle方法之前调用，执行初始化操作。默认没有操作"""
        # 在终端开始传递信息之前，确认终端信息的正确性
        # print("客户端 %s 连接成功" % self.client_address[0])
        self.real_num = chack_terminal_info(self.client_address[0])

        # print(self.real_num)

        # if self.real_num == 0:
        #     self.request.close()
        # print("终端信息确认成功")

    def handle(self):
        # print(type(self.real_num))
        while True:
            if self.real_num == 1:
                # 说明终端身份确定成功，向数据库中添加数据

                # 接受传递过来的图片坐标
                data = self.recv_msg()  # 调图片坐标的接口（函数：必须要return返回坐标）
                data = data.decode()  # 上线注释

                if not data:
                    self.request.close()
                    break

                # 向数据库中添加信息
                self.deal_msg(self.client_address[0], data)

                # 发送响应
                self.send_msg()


            else:
                # 说明终端不在数据库中
                print("设备信息异常")
                self.request.close()
                break

    def finish(self):
        print("{}请求结束".format(self.client_address[0]))
        pass

    def recv_msg(self):
        """接受信息"""
        # 1.1 获取数据
        data = self.request.recv(1024)
        # print(data)

        # 1.3 返回数据
        return data

    def send_msg(self):
        """发送指令"""
        response = "发送信息保存成功".encode()
        self.request.sendall(response)

    def deal_msg(self, ip, data):
        """处理数据"""
        save_info_to_db(ip, data)
